home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Utilities / Commodities / Yak / Source / Prefs / GadTools / Root_window.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-20  |  20.9 KB  |  665 lines

  1.  
  2. /*
  3.  *  Source machine generated by GadToolsBox V2.0b
  4.  *  which is (c) Copyright 1991-1993 Jaba Development
  5.  *
  6.  *  GUI Designed by : GaĆ«l Marziou & Ph. Bastiani
  7.  */
  8.  
  9.  
  10. #define __USE_SYSBASE
  11.  
  12. #include <exec/memory.h>
  13. #include <exec/types.h>
  14. #include <intuition/intuition.h>
  15. #include <intuition/classes.h>
  16. #include <intuition/classusr.h>
  17. #include <intuition/imageclass.h>
  18. #include <intuition/gadgetclass.h>
  19. #include <libraries/gadtools.h>
  20. #include <libraries/asl.h>
  21. #include <workbench/workbench.h>
  22. #include <proto/exec.h>
  23. #include <proto/dos.h>
  24. #include <proto/intuition.h>
  25. #include <proto/gadtools.h>
  26. #include <proto/icon.h>
  27. #include <proto/wb.h>
  28. #include <proto/asl.h>
  29. #include <string.h>
  30. #include <stdlib.h>
  31.  
  32. #include "code.h"
  33. #include "version.h"
  34. #include "yak.h"
  35. #include "hotkey_types.h"
  36. #include "gui.h"
  37. #include "filereq.h"
  38. #include "Requesters.h"
  39. #include "Settings.h"
  40. #include "Root_Window.h"
  41. #include "Root_Menus.h"
  42.  
  43. #define CATCOMP_NUMBERS
  44. #include "locale/yak_locale_strings.h"
  45.  
  46. IMPORT LONG (*HandleIDCMP)(void);
  47. IMPORT BOOL CreateIcons;
  48. IMPORT char *ProgramName;
  49. IMPORT char *PrefsFile;
  50. IMPORT struct NotifyRequest NotifyRequest;
  51.  
  52. struct Window   *RootWnd = NULL;
  53. struct Gadget   *RootGList = NULL;
  54. struct Menu     *RootMenus = NULL;
  55. struct Gadget   *RootGadgets[Root_CNT];
  56. UWORD            RootWidth = 600;
  57. UWORD            RootHeight = 156;
  58. UBYTE           *RootWdt = NULL;
  59. BOOL             RootWdi = FALSE;
  60.  
  61. struct AppWindow      *RootAppWin;         /* AppWindow pointer */
  62. IMPORT struct MsgPort *AppMsgPort;
  63.  
  64. /* Online help system */
  65. IMPORT void ShowYakHelp(char *, char *);
  66. IMPORT void CloseYakHelp(void);
  67. IMPORT char *PrefsHelp;
  68.  
  69.  
  70. #define ROOT_TNUM 3
  71.  
  72. struct IntuiText RootIText[ROOT_TNUM] = 
  73. {
  74.     2,0,JAM1,0,0,NULL,NULL,NULL,
  75.     2,0,JAM1,0,0,NULL,NULL,NULL,
  76.     2,0,JAM1,0,0,NULL,NULL,NULL
  77. };
  78.  
  79.  
  80. VOID
  81. InitRootITexts(VOID)
  82. {
  83.    RootIText[0].IText = getString(WINDOWS_ACTIVATE_STRING);
  84.    RootIText[1].IText = getString(AUTOPOPTOFRONT_STRING);
  85.    RootIText[2].IText = getString(SCREEN_ACTIVATE_STRING);
  86. }
  87.  
  88.  
  89.  
  90. UWORD RootGTypes[] = {
  91.         CHECKBOX_KIND,
  92.         CHECKBOX_KIND,
  93.         CHECKBOX_KIND,
  94.         CHECKBOX_KIND,
  95.         CHECKBOX_KIND,
  96.         CHECKBOX_KIND,
  97.         STRING_KIND,
  98.         STRING_KIND,
  99.         BUTTON_KIND,
  100.         BUTTON_KIND,
  101.         BUTTON_KIND,
  102.         BUTTON_KIND,
  103.         BUTTON_KIND,
  104.         BUTTON_KIND,
  105.         BUTTON_KIND,
  106.         SLIDER_KIND,
  107.         BUTTON_KIND
  108. };
  109.  
  110.  
  111. struct NewGadget RootNGad[] = 
  112. {
  113.         226, 15, 26,11,NULL,NULL,GD_AutoCheck     ,PLACETEXT_RIGHT,NULL,AUTOPOINT_STRING,
  114.           6, 15, 26,11,NULL,NULL,GD_KeyActCheck   ,PLACETEXT_RIGHT,NULL,KEY_ACTIVATE_STRING,
  115.           6, 72, 26,11,NULL,NULL,GD_ScrActCheck   ,PLACETEXT_RIGHT,NULL,SCREEN_ACTIVATE_STRING,
  116.         226, 72, 26,11,NULL,NULL,GD_AutoPopCheck  ,PLACETEXT_RIGHT,NULL,AUTOPOPTOFRONT_STRING,
  117.           6, 39, 26,11,NULL,NULL,GD_RMBActCheck   ,PLACETEXT_RIGHT,NULL,RMB_ACTIVATE_STRING,
  118.           6, 27, 26,11,NULL,NULL,GD_MMBActCheck   ,PLACETEXT_RIGHT,NULL,MMB_ACTIVATE_STRING,
  119.         430, 27,164,14,NULL,NULL,GD_AutoPat       ,PLACETEXT_LEFT ,NULL,AUTOSCREENS_STRING,
  120.         430, 84,164,14,NULL,NULL,GD_PopPat        ,PLACETEXT_LEFT ,NULL,POPWINDOWS_STRING,
  121.           6,122,212,13,NULL,NULL,GD_EditHotkeys   ,PLACETEXT_IN   ,NULL,EDIT_HOTKEYS_STRING,
  122.         222,122,186,13,NULL,NULL,GD_Miscellaneous ,PLACETEXT_IN   ,NULL,MISCELLANEOUS_STRING,
  123.         222,106,186,13,NULL,NULL,GD_Blanking      ,PLACETEXT_IN   ,NULL,Blanking,
  124.           6,140,100,13,NULL,NULL,GD_Save          ,PLACETEXT_IN   ,NULL,SAVE_STRING,
  125.         494,140,100,13,NULL,NULL,GD_Cancel0       ,PLACETEXT_IN   ,NULL,CANCEL_STRING,
  126.         250,140,100,13,NULL,NULL,GD_Use           ,PLACETEXT_IN   ,NULL,USE_STRING,
  127.           6,106,212,13,NULL,NULL,GD_MouseCycling  ,PLACETEXT_IN   ,NULL,MOUSECYCLING_STRING,
  128.         430, 43,147,11,NULL,NULL,GD_AutoPointDelay,PLACETEXT_LEFT ,NULL,AUTOPOINT_DELAY_STRING,
  129.         412,106,182,13,NULL,NULL,GD_DigitalClock  ,PLACETEXT_IN   ,NULL,DigitalClock
  130. };
  131.  
  132.  
  133. ULONG RootGTags[] = 
  134. {
  135.         (GTCB_Scaled),TRUE,(TAG_DONE),
  136.         (GTCB_Scaled),TRUE,(TAG_DONE),
  137.         (GTCB_Scaled),TRUE,(TAG_DONE),
  138.         (GTCB_Scaled),TRUE,(TAG_DONE),
  139.         (GTCB_Scaled),TRUE,(TAG_DONE),
  140.         (GTCB_Scaled),TRUE,(TAG_DONE),
  141.         (GTST_MaxChars),99,(TAG_DONE),
  142.         (GTST_MaxChars),99,(TAG_DONE),
  143.         (TAG_DONE),
  144.         (TAG_DONE),
  145.         (TAG_DONE),
  146.         (TAG_DONE),
  147.         (TAG_DONE),
  148.         (TAG_DONE),
  149.         (TAG_DONE),
  150.         (GTSL_Max),5,(GTSL_MaxLevelLen),4,(GTSL_LevelFormat),(ULONG)"%1ld",(GTSL_LevelPlace),(PLACETEXT_RIGHT),(PGA_Freedom), LORIENT_HORIZ,(GA_RelVerify),TRUE,(TAG_DONE),
  151. };
  152.  
  153.  
  154. /* initialise gadgets */
  155. static void
  156. InitAutoPointGadgets( void )
  157. {
  158.     InitWindowGadget(GDX_AutoPat, GTST_String, (LONG)patterns[YP_AUTOSCR_PAT].patstr, ROOT_WINDOW);
  159.     InitWindowGadget(GDX_AutoPat, GA_Disabled, !autopoint, ROOT_WINDOW);
  160.  
  161.     InitWindowGadget(GDX_AutoPointDelay, GTSL_Level, autopoint_delay, ROOT_WINDOW);
  162.  
  163.     InitWindowGadget(GDX_AutoPointDelay, GA_Disabled, !autopoint, ROOT_WINDOW);
  164. }
  165.  
  166. static void
  167. InitAutoPopGadgets( void)
  168. {
  169.     InitWindowGadget(GDX_PopPat, GTST_String, (LONG)patterns[YP_POPWIN_PAT].patstr, ROOT_WINDOW);
  170.     InitWindowGadget(GDX_PopPat, GA_Disabled, !autopop, ROOT_WINDOW);
  171. }
  172.  
  173.  
  174.  
  175. static void
  176. InitRootGadgets(void)
  177. {
  178.     InitToggleGadgets(ROOT_WINDOW);
  179.  
  180.     InitAutoPopGadgets();
  181.  
  182.     InitAutoPointGadgets();
  183. }
  184.  
  185. VOID 
  186. RootRender(void)
  187. {
  188.     UWORD X,Y;
  189.     UWORD width, height;
  190.     UWORD cnt;
  191.  
  192.     ComputeFont(RootWidth,RootHeight);
  193.  
  194.     /* Window activation */
  195.     X = Y = 0;
  196.     height= ComputeY(57);
  197.     DrawThinBevelBox(Scr, RootWnd->RPort,X+OffX, Y+OffY,
  198.                      ComputeX( RootWidth ),
  199.                      height,
  200.                      FALSE);
  201.     RootIText[ 0 ].LeftEdge  = X +5;
  202.     RootIText[ 0 ].TopEdge   = Y +3;
  203.  
  204.     /* Screens Activation */
  205.     width = ComputeX(220);
  206.     Y += height;
  207.     height = ComputeY(103) - Y;
  208.     DrawThinBevelBox(Scr, RootWnd->RPort,X+OffX, Y+OffY,
  209.                      width,
  210.                      height,
  211.                      FALSE);
  212.     RootIText[ 2 ].LeftEdge  = X +5;
  213.     RootIText[ 2 ].TopEdge   = Y +3;
  214.  
  215.     /* AutoPopToFront box */
  216.     X = width;
  217.     width  = ComputeX(RootWidth)-width;
  218.     height = ComputeY(103) - Y;
  219.     DrawThinBevelBox(Scr, RootWnd->RPort,X+OffX, Y+OffY,
  220.                      width,
  221.                      height,
  222.                      FALSE);
  223.     RootIText[ 1 ].LeftEdge  = X +5;
  224.     RootIText[ 1 ].TopEdge   = Y +3;
  225.  
  226.     /* Buttons */
  227.     Y += height;
  228.     height = ComputeY(138) - Y;
  229.     DrawThinBevelBox(Scr, RootWnd->RPort, OffX, Y+OffY,
  230.                      ComputeX( RootWidth ),
  231.                      height,
  232.                      FALSE);
  233.  
  234.     /* SAVE / USE / CANCEL */
  235.     Y += height;
  236.     DrawThinBevelBox(Scr, RootWnd->RPort, OffX, Y+OffY,
  237.                      ComputeX( RootWidth ),
  238.                      ComputeY(RootHeight)-ComputeY(138),
  239.                      FALSE );
  240.  
  241.     /* Text */
  242.     for ( cnt = 0; cnt < ROOT_TNUM; cnt++ )
  243.     {
  244.         RootIText[ cnt ].ITextFont = Font;
  245.         PrintIText( RootWnd->RPort, &RootIText[ cnt ], OffX, OffY );
  246.     }
  247. }
  248.  
  249.  
  250.  
  251.  
  252. int 
  253. OpenRootWindow(void)
  254. {
  255.         struct NewGadget        ng;
  256.         struct Gadget   *g;
  257.         UWORD           lc, tc;
  258.         WORD            wleft=WindowLeft, wtop=WindowTop;
  259.         UWORD           ww, wh;
  260.  
  261.         ComputeFont(RootWidth,RootHeight);
  262.  
  263.         ww = OffX + ComputeX(RootWidth) + Scr->WBorRight;
  264.         wh = OffY + ComputeY(RootHeight) + Scr->WBorBottom;
  265.  
  266.         SetUpWindowCoordinates(ww, wh, &wleft, &wtop);
  267.  
  268.         if (! (g = CreateContext(&RootGList)))
  269.                 return(1L);
  270.  
  271.         for(lc = 0,tc = 0; lc < Root_CNT; lc++) {
  272.  
  273.                 CopyMem((char *)&RootNGad[ lc ],(char *)&ng,(long)sizeof(struct NewGadget));
  274.  
  275.                 ng.ng_VisualInfo = VisualInfo;
  276.                 ng.ng_TextAttr   = Font;
  277.                 ng.ng_LeftEdge   = OffX + ComputeX(ng.ng_LeftEdge);
  278.                 ng.ng_TopEdge    = OffY + ComputeY(ng.ng_TopEdge);
  279.                 ng.ng_Width      = ComputeX(ng.ng_Width);
  280.                 ng.ng_Height     = ComputeY(ng.ng_Height);
  281.  
  282.                 RootGadgets[ lc ] = g = CreateGadgetA((ULONG)RootGTypes[ lc ],g,&ng,(struct TagItem *)&RootGTags[ tc ]);
  283.  
  284.                 while(RootGTags[ tc ]) tc += 2;
  285.                 tc++;
  286.  
  287.                 if (NOT g)
  288.                         return(2L);
  289.         }
  290.  
  291.         /**** CHANGED */
  292.         if (! (RootMenus = CreateMenus(RootNewMenu,GTMN_NewLookMenus,
  293.                                                                          TRUE,0L,
  294.                                                                          TAG_DONE)))
  295.                 return(3L);
  296.  
  297.         LayoutMenus(RootMenus,VisualInfo,GTMN_NewLookMenus,TRUE,TAG_DONE);
  298.  
  299.         if (! (RootWnd = OpenWindowTags(NULL,
  300.                                 WA_Left,          wleft,
  301.                                 WA_Top,           wtop,
  302.                                 WA_Width,         ww,
  303.                                 WA_Height,        wh,
  304.                                 WA_IDCMP,         BUTTONIDCMP|CHECKBOXIDCMP|STRINGIDCMP|SLIDERIDCMP|IDCMP_MENUPICK|IDCMP_REFRESHWINDOW|IDCMP_RAWKEY,
  305.                                 WA_Flags,         WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  306.                                 WA_Gadgets,       RootGList,
  307.                                 WA_Title,         RootWdt,
  308.                                 WA_ScreenTitle,   getString(COPYRIGHT_STRING),
  309.                                 WA_AutoAdjust,    TRUE,
  310. /**** ADDED */                  WA_NewLookMenus,  TRUE,
  311.                                 WA_PubScreenName, PubScreenName,
  312.                                 TAG_DONE)))
  313.         return(4L);
  314.  
  315.         RootAppWin = AddAppWindowA(0, 0, RootWnd, AppMsgPort, NULL);
  316.  
  317.         SetMenuStrip(RootWnd,RootMenus);
  318.         GT_RefreshWindow(RootWnd,NULL);
  319.  
  320.         RootRender();
  321.  
  322.         return(0L);
  323. }
  324.  
  325. VOID
  326. CloseRootWindow(void)
  327. {
  328.         CloseOneWindow(RootWnd,RootMenus,RootGList,RootAppWin);
  329.         RootWnd = NULL;
  330. }
  331.  
  332. /* show our Root window */
  333. BOOL
  334. ShowRootWindow(void)
  335. {
  336.     static char title[80];
  337.  
  338.     if (!RootWdi)
  339.     {
  340.         RootWdi = TRUE;
  341.  
  342.         strcpy(title, getString(Prefs_Window_TITLE));
  343.         strcat(title, " : ");
  344.         strcat(title,VERSION_NAME);
  345.         RootWdt = title;
  346.  
  347.         InitRootNewMenu ();
  348.         InitRootITexts();
  349.         LocalizeNGadLabels (Root_CNT, RootNGad);
  350.     }
  351.  
  352.     if (!OpenRootWindow())  /* like the name says... */
  353.     {
  354.             InitRootGadgets();
  355.             wndsigflag = 1 << RootWnd->UserPort->mp_SigBit;
  356.             HandleIDCMP  = HandleRootIDCMP;
  357.             curwin   = RootWnd;
  358.             curwinID = ROOT_WINDOW;
  359.  
  360.             return TRUE;
  361.     }
  362.  
  363.     FreeGadgets(RootGList);
  364.     FreeMenus(RootMenus);
  365.     CloseDownScreen();
  366.     curwin =  NULL;
  367.     wndsigflag = 0L;
  368.     return FALSE;
  369. }
  370.  
  371.  
  372.  
  373.  
  374. /* handle Root window events */
  375. LONG
  376. HandleRootIDCMP(void)
  377. {
  378.     struct IntuiMessage *msg;
  379.     struct Gadget       *gadget;
  380.     ULONG                class;
  381.     UWORD                code;
  382.     char                *file;
  383.     FileReqParams        frp;
  384.     BOOL                 close=FALSE;
  385.     LONG                 ret=RET_OKAY;
  386.  
  387.     while (!close && (msg=GT_GetIMsg(RootWnd->UserPort)))
  388.     {
  389.         class  = msg->Class;
  390.         code   = msg->Code;
  391.         gadget = (struct Gadget *)msg->IAddress;
  392.         GT_ReplyIMsg(msg);
  393.  
  394.         switch (class)
  395.         {
  396.           case GADGETUP:
  397.           case GADGETDOWN:
  398.                 switch (gadget->GadgetID)
  399.                 {
  400.                   case GD_EditHotkeys:
  401.                         if (!SwitchFromRootWindow(HOTKEY_WINDOW))
  402.                         {
  403.                             PostError(getString(Couldnt_open_other_window_ERR));
  404.                             ret = RET_QUIT;
  405.                         }
  406.                         close = TRUE;
  407.                         break;
  408.  
  409.                   case GD_Miscellaneous:
  410.                         if (!SwitchFromRootWindow(MISC_WINDOW))
  411.                         {
  412.                             PostError(getString(Couldnt_open_other_window_ERR));
  413.                             ret = RET_QUIT;
  414.                         }
  415.                         close = TRUE;
  416.                         break;
  417.  
  418.                         break;
  419.  
  420.                   case GD_Blanking:
  421.                         if (!SwitchFromRootWindow(BLANK_WINDOW))
  422.                         {
  423.                             PostError(getString(Couldnt_open_other_window_ERR));
  424.                             ret = RET_QUIT;
  425.                         }
  426.                         close = TRUE;
  427.                         break;
  428.  
  429.                   case GD_MouseCycling:
  430.                         if (!SwitchFromRootWindow(MCYCLING_WINDOW))
  431.                         {
  432.                             PostError(getString(Couldnt_open_other_window_ERR));
  433.                             ret = RET_QUIT;
  434.                         }
  435.                         close = TRUE;
  436.                         break;
  437.  
  438.                   case GD_DigitalClock:
  439.                         if (!SwitchFromRootWindow(DIGITALCLOCK_WINDOW))
  440.                         {
  441.                             PostError(getString(Couldnt_open_other_window_ERR));
  442.                             ret = RET_QUIT;
  443.                         }
  444.                         close = TRUE;
  445.                         break;
  446.  
  447.                   case GD_AutoPat:
  448.                         NewPattern(GDX_AutoPat, &patterns[YP_AUTOSCR_PAT], gadget, ROOT_WINDOW);
  449.                         break;
  450.  
  451.                   case GD_PopPat:
  452.                         NewPattern(GDX_PopPat, &patterns[YP_POPWIN_PAT], gadget, ROOT_WINDOW);
  453.                         break;
  454.  
  455.                   case GD_Save:
  456.                         DisableYakInterface();
  457.                         EndNotify(&NotifyRequest);
  458.                         SaveSettings(ENVARC_CONFIG_FILE);
  459.                         CopyFile(ENVARC_CONFIG_FILE, ENV_CONFIG_FILE);
  460.                         StartNotify(&NotifyRequest);
  461.                         EnableYakInterface();
  462.                         close = TRUE;
  463.                         ret   = RET_QUIT;
  464.                         break;
  465.  
  466.                   case GD_Use:
  467.                         DisableYakInterface();
  468.                         EndNotify(&NotifyRequest);
  469.                         SaveSettings(ENV_CONFIG_FILE);
  470.                         StartNotify(&NotifyRequest);
  471.                         close = TRUE;
  472.                         ret   = RET_QUIT;
  473.                         break;
  474.  
  475.                   case GD_Cancel0:
  476.                         close = TRUE;
  477.                         ret   = RET_QUIT;
  478.                         break;
  479.  
  480.                   case GD_AutoCheck: /* toggle */
  481.                         autopoint ^= TRUE;
  482.                         InitAutoPointGadgets();
  483.                         break;
  484.  
  485.                   case GD_AutoPopCheck: /* toggle */
  486.                         autopop ^= TRUE;
  487.                         InitAutoPopGadgets();
  488.                         break;
  489.  
  490.                   case GD_KeyActCheck: /* toggle */
  491.                         keyactivate ^= TRUE;
  492.                         break;
  493.  
  494.                   case GD_ScrActCheck: /* toggle */
  495.                         scractivate ^= TRUE;
  496.                         break;
  497.  
  498.                   case GD_RMBActCheck: /* toggle */
  499.                         rmbactivate ^= TRUE;
  500.                         break;
  501.  
  502.                   case GD_MMBActCheck: /* toggle */
  503.                         mmbactivate ^= TRUE;
  504.                         break;
  505.  
  506.                   case GD_AutoPointDelay:
  507.                         autopoint_delay = code;
  508.                         break;
  509.  
  510.                 }                      /* switch (gadget->GadgetID) */
  511.                 break;
  512.  
  513.           case IDCMP_MENUPICK:
  514.                 while (!close && (code != MENUNULL))
  515.                 {
  516.                     struct MenuItem *item = ItemAddress(RootMenus, code);
  517.  
  518.                     switch((UBYTE)GTMENUITEM_USERDATA(item))
  519.                     {
  520.                         case MD_OPEN:
  521.                             frp.frp_Window      = curwin;
  522.                             frp.frp_Title       = getString(FILEREQ_LOAD_STRING);
  523.                             frp.frp_InitialFile = PrefsFile;
  524.                             frp.frp_Flag1       = 0L;
  525.  
  526.                             DisableYakInterface();
  527.                             if (file=OpenFileRequester(&frp))
  528.                             {
  529.                                 LoadSettings(file);
  530.                                 FreeVec(PrefsFile);
  531.                                 PrefsFile = file;
  532.                                 InitRootGadgets();
  533.                             }
  534.                             EnableYakInterface();
  535.                             break;
  536.  
  537.                         case MD_SAVE:
  538.                             DisableYakInterface();
  539.                             EndNotify(&NotifyRequest);
  540.                             SaveSettings(ENVARC_CONFIG_FILE);
  541.                             CopyFile(ENVARC_CONFIG_FILE, ENV_CONFIG_FILE);
  542.                             StartNotify(&NotifyRequest);
  543.                             EnableYakInterface();
  544.                             break;
  545.  
  546.                         case MD_SAVEAS:
  547.                             frp.frp_Window      = curwin;
  548.                             frp.frp_Title       = getString(FILEREQ_SAVEAS_STRING);
  549.                             frp.frp_InitialFile = PrefsFile;
  550.                             frp.frp_Flag1       = FRF_DOSAVEMODE;
  551.  
  552.                             DisableYakInterface();
  553.                             EndNotify(&NotifyRequest);
  554.                             if (file=OpenFileRequester(&frp))
  555.                             {
  556.                                 SaveSettings(file);
  557.                                 if (CreateIcons)
  558.                                 {
  559.                                     struct DiskObject *dobj;
  560.  
  561.                                     /* Get project icon */
  562.                                     if (!(dobj=GetDiskObject("ENV:Sys/def_yak")))
  563.                                         dobj = GetDefDiskObject(WBPROJECT);
  564.                                     
  565.                                     if (dobj)
  566.                                     {
  567.                                         /* Set values */
  568.                                         dobj->do_DefaultTool = ProgramName;
  569.                                         dobj->do_Type        = WBPROJECT;
  570.  
  571.                                         /* Write icon */
  572.                                         PutDiskObject(file, dobj);
  573.  
  574.                                         /* Free icon */
  575.                                         FreeDiskObject(dobj);
  576.                                     }
  577.                                 }
  578.                                 FreeVec(PrefsFile);
  579.                                 PrefsFile = file;
  580.                             }
  581.                             StartNotify(&NotifyRequest);
  582.                             EnableYakInterface();
  583.                             break;
  584.  
  585.                         case MD_HIDE:
  586.                             CloseYakHelp();
  587.                             HideInterface();
  588.                             close = TRUE;
  589.                             break;
  590.  
  591.                         case MD_ABOUT:
  592.                             DisableYakInterface();
  593.                             PostError(getString(About_Yak_STRING));
  594.                             EnableYakInterface();
  595.                             break;
  596.  
  597.                         case MD_QUIT:
  598.                             close = TRUE;
  599.                             ret   = RET_QUIT;
  600.                             break;
  601.  
  602.                         case MD_DEFAULT:
  603.                             DisableYakInterface();
  604.                             SetDefaultSettings();
  605.                             InitRootGadgets();
  606.                             EnableYakInterface();
  607.                             break;
  608.  
  609.                         case MD_LASTSAVED:
  610.                             DisableYakInterface();
  611.                             LoadSettings(ENVARC_CONFIG_FILE);
  612.                             InitRootGadgets();
  613.                             EnableYakInterface();
  614.                             break;
  615.  
  616.                         case MD_ACTIVE:
  617.                             DisableYakInterface();
  618.                             LoadSettings(ENV_CONFIG_FILE);
  619.                             InitRootGadgets();
  620.                             EnableYakInterface();
  621.                             break;
  622.  
  623.                         case MD_CREATEICONS:
  624.                             CreateIcons ^= TRUE;
  625.                             break;
  626.  
  627.                     }
  628.                     code = item->NextSelect;
  629.  
  630.                 }       /* while more menuchoices */
  631.                 break;
  632.  
  633.           case IDCMP_RAWKEY:
  634.                 /* Help key pressed */
  635.                 if (code == 95)
  636.                 {
  637.                     /* Display the node */
  638.                     ShowYakHelp(PrefsHelp, "MainWindow");
  639.                 }
  640.                 break;
  641.  
  642.           case REFRESHWINDOW:
  643.                 GT_BeginRefresh(RootWnd);
  644.                 RootRender();
  645.                 GT_EndRefresh(RootWnd, TRUE);
  646.                 break;
  647.  
  648.         }       /* switch (class) */
  649.  
  650.     }       /* while more messages */
  651.  
  652.     return ret;
  653. }
  654.  
  655.  
  656.  
  657. /* switch from Root window to a sub-window */
  658. BOOL
  659. SwitchFromRootWindow(UBYTE WindowID)
  660. {
  661.         CloseRootWindow();
  662.         return ShowWindowID(WindowID);
  663. }
  664.  
  665.